package week6;

/**
 *
 * 91. 解码方法
 * https://leetcode-cn.com/problems/decode-ways/
 *
 *
 *
 * 执行结果：  通过  显示详情
 *
 * 添加备注
 * 执行用时：0 ms, 在所有 Java 提交中击败了100.00% 的用户
 * 内存消耗：36.8 MB, 在所有 Java 提交中击败了24.53% 的用户
 * 通过测试用例：269 / 269
 * 炫耀一下:
 *
 *
 *
 */
public class Week6DecodeWays {

    public int numDecodings(String s) {
        int length = s.length();
        int[] array = new int[length + 1];
        array[0] = 1;
        for(int size = 1; size <= length; size++) {
            char before1 = s.charAt(size - 1);
            if(before1 != '0') {
                // 上一个字符不是 0 则累加
                array[size] += array[size - 1];
            }
            if(size > 1) {
                char before2 = s.charAt(size - 2);
                if(before2 != '0' && ((before2 - '0') * 10) + (before1 - '0') <= 26) {
                    // 上两个字符不是 0 并且 是两个字符在26以内 (A-Z 减 0 ACSII 码值小于26)
                    array[size] += array[size - 2];
                }

            }

        }

        int num = array[length];
        return num;

    }
}
